package com.ruoyi.system.media;

import lombok.Data;

/**
 * 用户卡复合消费专用文件(DF01/0019)编码信息
 * 43bytes
 */
@Data
public class Ucard0019EdModel {
    public static final int MSG_LEN = 43;

    /**
     * 应用标示(	01-01,1,b)
     * 0xAA-ETC 正常插卡；
     * 0xBB-ETC 用户入口异常,入口信息写入OBU;
     * 0xCC-ETC用户入口异常，第一个读取到 OBU 的门架作为入口门架写入
     */
    public byte[] nApplCls = new byte[1];

    /**
     * 记录长度(	02-02,1,n)
     * 固定为0x29
     */
    public byte[] nDataLen = new byte[1];

    /**
     * 应用锁定(03-03,1,n)
     * 0x00-未锁定；0x01-已锁定；其他值-保留
     */
    public byte[] nApplLck = new byte[1];

    /**
     * 入口网络(04-05,2,cn)
     * 样例:0x4101
     */
    public byte[] cEntyNet = new byte[2];

    /**
     * 入口站号(06-07,2,n)
     */
    public byte[] cEntyStn = new byte[2];

    /**
     * 入口道号(08-08,1,n)
     */
    public byte[] nEntyLan = new byte[1];

    /**
     * 入口时间(09-12,4,n)
     * 北京时间 2015-4-2 15:36:20 UNIX 时间为 55 1C F1	74
     */
    public byte[] cEntyTim = new byte[4];

    /**
     * 入口车型(13-13,1,n)
     */
    public byte[] nEntyVch = new byte[1];

    /**
     * 流通状态(14-14,1,n)
     * 0x00－保留， 0x 01－封闭 E/M混合入口， 0x02－封闭 E/M 混合出口， 0x03－封闭 ETC 入口，0x04－封闭 ETC 出口， 0x05－E/M 混合开放式， 0x06－ ETC 开放式， 0x07～ 0F 自定义， 0x10－自助
     */
    public byte[] nCardStt = new byte[1];

    /**
     * 门架编号(15-17,3,bn)
     */
    public byte[] cGrantNo = new byte[3];

    /**
     * 门架时间(18-21,4,n)
     * 北京时间 2015-4-2 15:36:20 UNIX 时间为 55 1C F1 74
     */
    public byte[] cGrantTm = new byte[4];

    /**
     * 车牌号码(22-33,12,an)
     */
    public byte[] cPltData = new byte[12];

    /**
     * 车牌颜色(34-34,1,n)
     * 0x00 –蓝色； 0x01–黄色； 0x02 –黑色； 0x03 –白色； 0x04－渐变绿色； 0x05－黄绿双拼色； 0x06－蓝白渐变；0x07～ 0xFF 保留
     */
    public byte[] nPltCols = new byte[1];

    /**
     * 货车轴数(35-35,1,n)
     */
    public byte[] nAxisSum = new byte[1];

    /**
     * 货车总重(36-38,3,n)单位kg
     */
    public byte[] cTotWeit = new byte[3];

    /**
     * 车辆状态标识(39-39,1,n)
     * 0x00－本次通行用于大件运输
     * 0x01－非优惠车辆
     * 0x02－绿通
     * 0x03－联合收割机
     * 0x04－集装箱车辆
     * 0xFF－默认
     */
    public byte[] nVSign = new byte[1];

    /**
     * 一类交易累计金额(40-43,4,n)
     * 单位：分
     */
    public byte[] cSpareDt = new byte[4];

    /**
     * 信息编码
     *
     * @param dd
     * @return
     */
    public static Ucard0019EdModel encoded(Ucard0019Model dd) {
        Ucard0019EdModel ed = new Ucard0019EdModel();
        ed.nApplCls = ZTools.int2bin(1, dd.nApplCls);
        ed.nDataLen = ZTools.int2bin(1, dd.nDataLen);
        ed.nApplLck = ZTools.int2bin(1, dd.nApplLck);
        ed.cEntyNet = ZTools.hex2bin(2, dd.cEntyNet);
        ed.cEntyStn = ZTools.hex2bin(2, dd.cEntyStn);
        ed.nEntyLan = ZTools.int2bin(1, dd.nEntyLan);
        ed.cEntyTim = ZTools.int2bin(4, dd.cEntyTim);
        ed.nEntyVch = ZTools.int2bin(1, dd.nEntyVch);
        ed.nCardStt = ZTools.int2bin(1, dd.nCardStt);
        ed.cGrantNo = ZTools.hex2bin(3, dd.cGrantNo);
        ed.cGrantTm = ZTools.int2bin(4, dd.cGrantTm);
        ed.cPltData = ZTools.str2bin(12, dd.cPltData);
        ed.nPltCols = ZTools.int2bin(1, dd.nPltCols);
        ed.nAxisSum = ZTools.int2bin(1, dd.nAxisSum);
        ed.cTotWeit = ZTools.int2bin(3, dd.cTotWeit);
        ed.nVSign = ZTools.int2bin(1, dd.nVSign);
        ed.cSpareDt = ZTools.int2bin(4, dd.cSpareDt);

        return ed;
    }

    public byte[] toBytes() {
        byte[] ret = ZTools.sbMerger(nApplCls, nDataLen, nApplLck, cEntyNet, cEntyStn, nEntyLan, cEntyTim, nEntyVch, nCardStt, cGrantNo, cGrantTm, cPltData, nPltCols, nAxisSum, cTotWeit, nVSign, cSpareDt);
        return ret;
    }

    public String toHexStr() {
        return ZTools.bin2hex(toBytes());
    }
}
